//package com.wjk.kylin.rpc.core.invoker.call;
//
//public abstract class RpcConsumerCallback<T> {
//
//    public abstract void onSuccess(T result);
//
//    public abstract void onFailure(Throwable exception);
//
//
//    // ---------------------- thread invoke callback ----------------------
//
//    private static ThreadLocal<RpcConsumerCallback> threadInvokerFuture = new ThreadLocal<>();
//
//    /**
//     * get callback
//     *
//     * @return
//     */
//    public static RpcConsumerCallback getCallback() {
//        RpcConsumerCallback invokeCallback = threadInvokerFuture.get();
//        threadInvokerFuture.remove();
//        return invokeCallback;
//    }
//
//    /**
//     * set future
//     *
//     * @param invokeCallback
//     */
//    public static void setCallback(RpcConsumerCallback invokeCallback) {
//        threadInvokerFuture.set(invokeCallback);
//    }
//
//    /**
//     * remove future
//     */
//    public static void removeCallback() {
//        threadInvokerFuture.remove();
//    }
//
//
//}
